# -*- coding: utf-8 -*-
"""
CART和决策树的超参数
Created on Fri Apr 27 10:10:49 2018

@author: Allen
"""
import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets

X, y = datasets.make_moons( noise = 0.25, random_state = 666 )

plt.scatter( X[y==0, 0], X[y==0, 1] )
plt.scatter( X[y==1, 0], X[y==1, 1] )
plt.show()

from sklearn.tree import DecisionTreeClassifier
dt_clf = DecisionTreeClassifier()
dt_clf.fit( X, y )
'''
可以看出，过拟合
'''

dt_clf2 = DecisionTreeClassifier( max_depth = 2 )
dt_clf2.fit( X, y )
'''
过拟合大大降低，但是是欠拟合
'''

dt_clf3 = DecisionTreeClassifier( min_sample_split = 10 )
dt_clf3.fit( X, y )
'''
对于一个结点来说，最少有几个样本数据，才对其进行分类
值越高，越不容易过拟合
'''

dt_clf4 = DecisionTreeClassifier( min_sample_leaf = 6 )
dt_clf4.fit( X, y )
'''
对于一个叶子节点来说，至少拥有几个样本
值越小，越容易过拟合
'''

dt_clf5 = DecisionTreeClassifier( max_leaf_nodes = 4 )
dt_clf5.fit( X, y )
'''
最多有多少个叶子节点
叶子节点越多，越复杂，越容易产生过拟合
'''

'''
这些参数可以进行组合使用，实际使用过程中可以使用网格搜索来确定这些值。
'''